/**
 * 地址选择组件
 * 提供完整的地图选择、定位、地址管理功能
 */

import { LocationHelper, MapSelector, AddressInput, LocationInfo } from '../../utils/location-helper';

Component({
  properties: {
    // 当前选中的地址
    selectedAddress: {
      type: String,
      value: ''
    },
    // 纬度
    latitude: {
      type: Number,
      value: 0
    },
    // 经度
    longitude: {
      type: Number,
      value: 0
    },
    // 占位符文本
    placeholder: {
      type: String,
      value: '请选择地址'
    },
    // 是否显示坐标信息
    showCoordinate: {
      type: Boolean,
      value: false
    },
    // 是否必填
    required: {
      type: Boolean,
      value: false
    }
  },

  data: {
    // 组件内部状态
  },

  methods: {
    /**
     * 打开位置选择器
     */
    async openLocationSelector() {
      try {
        wx.showLoading({
          title: '正在打开地图...'
        });

        // 获取当前已选位置作为地图中心
        const currentLocation = this.data.latitude && this.data.longitude ? {
          name: '',
          address: this.data.selectedAddress,
          latitude: this.data.latitude,
          longitude: this.data.longitude
        } : undefined;

        // 使用智能位置选择
        const selectedLocation = await MapSelector.chooseLocationWithConfirm(currentLocation);
        
        wx.hideLoading();
        
        // 触发选择完成事件
        this.triggerEvent('locationSelected', {
          address: selectedLocation.address,
          latitude: selectedLocation.latitude,
          longitude: selectedLocation.longitude,
          name: selectedLocation.name
        });

        // 显示成功提示
        wx.showToast({
          title: '地址选择成功',
          icon: 'success',
          duration: 1500
        });
        
      } catch (error) {
        wx.hideLoading();
        
        if (error instanceof Error && !error.message.includes('取消')) {
          wx.showToast({
            title: error.message || '选择地址失败',
            icon: 'none'
          });
        }
      }
    },

    /**
     * 在地图中查看当前位置
     */
    async viewOnMap() {
      if (!this.data.latitude || !this.data.longitude) {
        wx.showToast({
          title: '暂无位置信息',
          icon: 'none'
        });
        return;
      }

      try {
        const locationInfo: LocationInfo = {
          name: '商家位置',
          address: this.data.selectedAddress,
          latitude: this.data.latitude,
          longitude: this.data.longitude
        };

        await LocationHelper.openLocation(locationInfo);
        
      } catch (error) {
        wx.showToast({
          title: '打开地图失败',
          icon: 'none'
        });
      }
    },

    /**
     * 使用当前位置
     */
    async useCurrentLocation() {
      try {
        wx.showLoading({
          title: '正在获取位置...'
        });

        const currentLocation = await LocationHelper.getCurrentLocation(true);
        
        wx.hideLoading();
        
        // 显示确认对话框
        wx.showModal({
          title: '确认使用当前位置',
          content: `当前位置：\n${currentLocation.address}`,
          confirmText: '确认使用',
          cancelText: '取消',
          success: (res) => {
            if (res.confirm) {
              // 触发位置选择事件
              this.triggerEvent('locationSelected', {
                address: currentLocation.address,
                latitude: currentLocation.latitude,
                longitude: currentLocation.longitude,
                name: currentLocation.name
              });

              wx.showToast({
                title: '位置设置成功',
                icon: 'success'
              });
            }
          }
        });
        
      } catch (error) {
        wx.hideLoading();
        
        let errorMsg = '获取当前位置失败';
        if (error instanceof Error) {
          errorMsg = error.message;
        }
        
        wx.showToast({
          title: errorMsg,
          icon: 'none'
        });
      }
    },

    /**
     * 清除选中的地址
     */
    clearAddress() {
      this.triggerEvent('locationSelected', {
        address: '',
        latitude: 0,
        longitude: 0,
        name: ''
      });
    },

    /**
     * 验证地址信息
     */
    validateAddress(): boolean {
      if (this.data.required && !this.data.selectedAddress) {
        wx.showToast({
          title: '请选择地址',
          icon: 'none'
        });
        return false;
      }

      if (this.data.selectedAddress && !LocationHelper.isValidCoordinate(this.data.latitude, this.data.longitude)) {
        wx.showToast({
          title: '位置坐标无效',
          icon: 'none'
        });
        return false;
      }

      return true;
    }
  },

  /**
   * 组件生命周期
   */
  lifetimes: {
    attached() {
      // 组件初始化
      console.log('地址选择组件初始化');
    },

    detached() {
      // 组件销毁
      console.log('地址选择组件销毁');
    }
  }
});


